# spdlog库的配置

# 库版本
set(SPDLOG_VERSION "1.12.0") # 假设版本号，请根据实际情况调整

# 设置spdlog库目录
set(SPDLOG_INCLUDE_DIR "${DEP_PLATFORM_DIR}/spdlog/include")

if(WIN32)
    # 确定Debug/Release目录
    if(CMAKE_BUILD_TYPE STREQUAL "Debug")
        set(SPDLOG_LIB_DIR "${DEP_PLATFORM_DIR}/spdlog/lib/Debug")
    else()
        set(SPDLOG_LIB_DIR "${DEP_PLATFORM_DIR}/spdlog/lib/Release")
    endif()
else()
    set(SPDLOG_LIB_DIR "${DEP_PLATFORM_DIR}/spdlog/lib")
endif()
# 设置库文件名称（根据平台不同而异）
if(WIN32)
    # Windows下，Debug库通常以'd'结尾
    if(CMAKE_BUILD_TYPE STREQUAL "Debug")
        set(SPDLOG_LIBRARIES "${SPDLOG_LIB_DIR}/spdlogd.lib")
    else()
        set(SPDLOG_LIBRARIES "${SPDLOG_LIB_DIR}/spdlog.lib")
    endif()
else()
    # Linux下使用绝对路径
    set(SPDLOG_LIBRARIES "${SPDLOG_LIB_DIR}/libspdlog.a")
    # 确保路径存在
    if(EXISTS "${SPDLOG_LIBRARIES}")
        message(STATUS "找到spdlog库文件: ${SPDLOG_LIBRARIES}")
    else()
        message(WARNING "spdlog库文件不存在: ${SPDLOG_LIBRARIES}")
    endif()
endif()


# 检查是否使用spdlog
option(USE_SPDLOG "使用spdlog日志库" ON)

# 如果不使用spdlog，则跳过后续配置
if(NOT USE_SPDLOG)
    return()
endif()

# 检查库是否存在
set(SPDLOG_FOUND FALSE)
if(EXISTS "${SPDLOG_INCLUDE_DIR}/spdlog/spdlog.h")
    set(SPDLOG_FOUND TRUE)
    message(STATUS "找到spdlog头文件: ${SPDLOG_INCLUDE_DIR}/spdlog/spdlog.h")
else()
    message(STATUS "未找到spdlog头文件")
endif()

# 检查库文件
if(SPDLOG_FOUND)
    if(NOT EXISTS "${SPDLOG_LIBRARIES}")
        message(STATUS "spdlog库文件不存在: ${SPDLOG_LIBRARIES}")
        set(SPDLOG_FOUND FALSE)
    else()
        message(STATUS "成功找到spdlog库文件: ${SPDLOG_LIBRARIES}")
    endif()
endif()

# 如果未找到spdlog库，则尝试从源码构建
if(NOT SPDLOG_FOUND)
    message(STATUS "未找到预编译的spdlog库，尝试从源码构建...")
    
    # 确认是否要从源码构建
    option(USE_SPDLOG_SOURCE "从源码构建spdlog" ON)
    
    if(USE_SPDLOG_SOURCE)
        include(FetchContent)
        FetchContent_Declare(
            spdlog
            GIT_REPOSITORY https://github.com/gabime/spdlog.git
            GIT_TAG v${SPDLOG_VERSION}
        )
        
        # 配置spdlog构建选项
        set(SPDLOG_BUILD_EXAMPLE OFF CACHE BOOL "" FORCE)
        set(SPDLOG_INSTALL ON CACHE BOOL "" FORCE)
        
        FetchContent_MakeAvailable(spdlog)
        
        # 使用自动下载构建的spdlog
        set(SPDLOG_LIBRARIES spdlog)
        set(SPDLOG_FOUND TRUE)
        message(STATUS "已从源码构建spdlog库")
    else()
        message(WARNING "跳过spdlog配置，项目中的spdlog功能将被禁用")
    endif()
endif()

# 添加spdlog编译定义
if(SPDLOG_FOUND)
    add_compile_definitions(USE_SPDLOG)
endif()

# 导出变量
set(SPDLOG_INCLUDE_DIR ${SPDLOG_INCLUDE_DIR} PARENT_SCOPE)
set(SPDLOG_LIBRARIES ${SPDLOG_LIBRARIES} PARENT_SCOPE)
set(SPDLOG_FOUND ${SPDLOG_FOUND} PARENT_SCOPE)
set(USE_SPDLOG ${USE_SPDLOG} PARENT_SCOPE) 